home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / system-config-printer / userdefault.py < prev    next >
Text File  |  2009-10-19  |  6KB  |  168 lines

  1. #!/usr/bin/env python
  2.  
  3. ## Copyright (C) 2006, 2007, 2008 Red Hat, Inc.
  4. ## Copyright (C) 2007, 2008 Tim Waugh <twaugh@redhat.com>
  5.  
  6. ## This program is free software; you can redistribute it and/or modify
  7. ## it under the terms of the GNU General Public License as published by
  8. ## the Free Software Foundation; either version 2 of the License, or
  9. ## (at your option) any later version.
  10.  
  11. ## This program is distributed in the hope that it will be useful,
  12. ## but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. ## GNU General Public License for more details.
  15.  
  16. ## You should have received a copy of the GNU General Public License
  17. ## along with this program; if not, write to the Free Software
  18. ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  
  20. import gtk
  21. import os
  22. import subprocess
  23.  
  24. class UserDefaultPrinter:
  25.     def __init__ (self):
  26.         try:
  27.             lpoptions = os.environ["HOME"]
  28.         except KeyError:
  29.             try:
  30.                 lpoptions = "/home/" + os.environ["USER"]
  31.             except KeyError:
  32.                 lpoptions = None
  33.  
  34.         if lpoptions:
  35.             lpoptions += "/.cups/lpoptions"
  36.  
  37.         self.lpoptions = lpoptions
  38.  
  39.     def clear (self):
  40.         if not self.lpoptions:
  41.             return
  42.  
  43.         try:
  44.             opts = file (self.lpoptions).readlines ()
  45.         except IOError:
  46.             return
  47.  
  48.         for i in range (len (opts)):
  49.             if opts[i].startswith ("Default "):
  50.                 opts[i] = "Dest " + opts[i][8:]
  51.         file (self.lpoptions, "w").writelines (opts)
  52.  
  53.     def get (self):
  54.         if not self.lpoptions:
  55.             return None
  56.  
  57.         try:
  58.             opts = file (self.lpoptions).readlines ()
  59.         except IOError:
  60.             return None
  61.  
  62.         for i in range (len (opts)):
  63.             if opts[i].startswith ("Default "):
  64.                 rest = opts[i][8:]
  65.                 slash = rest.find ("/")
  66.                 if slash != -1:
  67.                     space = rest[:slash].find (" ")
  68.                 else:
  69.                     space = rest.find (" ")
  70.                 return rest[:space]
  71.         return None
  72.  
  73.     def set (self, default):
  74.         p = subprocess.Popen ([ "lpoptions", "-d", default ],
  75.                               stdin=file ("/dev/null"),
  76.                               stdout=file ("/dev/null", "w"),
  77.                               stderr=subprocess.PIPE)
  78.         (stdout, stderr) = p.communicate ()
  79.         exitcode = p.wait ()
  80.         if exitcode != 0:
  81.             raise RuntimeError (exitcode, stderr.strip ())
  82.         return
  83.  
  84.     def __repr__ (self):
  85.         return "<UserDefaultPrinter (%s)>" % repr (self.get ())
  86.  
  87. class UserDefaultPrompt:
  88.     def __init__ (self,
  89.                   set_default_fn,
  90.                   refresh_fn,
  91.                   name,
  92.                   title,
  93.                   parent,
  94.                   primarylabel,
  95.                   systemwidelabel,
  96.                   clearpersonallabel,
  97.                   personallabel):
  98.         self.set_default_fn = set_default_fn
  99.         self.refresh_fn = refresh_fn
  100.         self.name = name
  101.         dialog = gtk.Dialog (title,
  102.                              parent,
  103.                              gtk.DIALOG_MODAL |
  104.                              gtk.DIALOG_DESTROY_WITH_PARENT |
  105.                              gtk.DIALOG_NO_SEPARATOR,
  106.                              (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
  107.                               gtk.STOCK_OK, gtk.RESPONSE_OK))
  108.         dialog.set_default_response (gtk.RESPONSE_OK)
  109.         dialog.set_border_width (6)
  110.         dialog.set_resizable (False)
  111.         hbox = gtk.HBox (False, 12)
  112.         hbox.set_border_width (6)
  113.         image = gtk.Image ()
  114.         image.set_from_stock (gtk.STOCK_DIALOG_QUESTION, gtk.ICON_SIZE_DIALOG)
  115.         image.set_alignment (0.0, 0.0)
  116.         hbox.pack_start (image, False, False, 0)
  117.         vboxouter = gtk.VBox (False, 6)
  118.         primary = gtk.Label ()
  119.         primary.set_markup ('<span weight="bold" size="larger">' +
  120.                             primarylabel + '</span>')
  121.         primary.set_line_wrap (True)
  122.         primary.set_alignment (0.0, 0.0)
  123.         vboxouter.pack_start (primary, False, False, 0)
  124.         vboxradio = gtk.VBox (False, 0)
  125.         systemwide = gtk.RadioButton (label=systemwidelabel)
  126.         vboxradio.pack_start (systemwide, False, False, 0)
  127.         clearpersonal = gtk.CheckButton (clearpersonallabel)
  128.         alignment = gtk.Alignment (0, 0, 0, 0)
  129.         alignment.set_padding (0, 0, 12, 0)
  130.         alignment.add (clearpersonal)
  131.         vboxradio.pack_start (alignment)
  132.         vboxouter.pack_start (vboxradio, False, False, 0)
  133.         personal = gtk.RadioButton (group=systemwide,
  134.                                     label=personallabel)
  135.         vboxouter.pack_start (personal, False, False, 0)
  136.         hbox.pack_start (vboxouter, False, False, 0)
  137.         dialog.vbox.pack_start (hbox, False, False, 0)
  138.         systemwide.set_active (True)
  139.         clearpersonal.set_active (True)
  140.         self.userdef = UserDefaultPrinter ()
  141.         clearpersonal.set_sensitive (self.userdef.get () != None)
  142.  
  143.         self.systemwide = systemwide
  144.         self.clearpersonal = clearpersonal
  145.         self.personal = personal
  146.         systemwide.connect ("toggled", self.on_toggled)
  147.         dialog.connect ("response", self.on_response)
  148.         dialog.show_all ()
  149.  
  150.     def on_toggled (self, button):
  151.         self.clearpersonal.set_sensitive (self.userdef.get () != None and
  152.                                           self.systemwide.get_active ())
  153.  
  154.     def on_response (self, dialog, response_id):
  155.         if response_id != gtk.RESPONSE_OK:
  156.             dialog.destroy ()
  157.             return
  158.  
  159.         if self.systemwide.get_active ():
  160.             if self.clearpersonal.get_active ():
  161.                 self.userdef.clear ()
  162.             self.set_default_fn (self.name)
  163.         else:
  164.             self.userdef.set (self.name)
  165.             self.refresh_fn ()
  166.  
  167.         dialog.destroy ()
  168.